﻿//using System;
//using System.Collections.Generic;
//using System.IO;
//using System.Text;
//using Utility.Enums;

//namespace WPay.Infrastructure.Unity.H5Pay
//{
//    /// <summary>
//    /// 多线程写文本文件
//    /// </summary>
//    public class AsynFileHelp
//    {
//        private static Dictionary<long, long> lockDic = new Dictionary<long, long>();
//        private string fileName;
//        /// <summary>  
//        /// 获取或设置文件名称  
//        /// </summary>  
//        public string FileName
//        {
//            get { return fileName; }
//            set { fileName = value; }
//        }
//        /// <summary>  
//        /// 构造函数  
//        /// </summary>  
//        /// <param name="fileName">文件全路径名</param>  
//        public AsynFileHelp(string filename)
//        {
//            fileName = filename;
//        }

//        /// <summary>  
//        /// 创建文件  
//        /// </summary>  
//        /// <param name="fileName"></param>  
//        public void Create(string fileName)
//        {
//            if (!File.Exists(fileName))
//            {
//                using (FileStream fs = File.Create(fileName))
//                {
//                    fs.Close();
//                }
//            }
//        }

//        /// <summary>  
//        /// 写入文本  
//        /// </summary>  
//        /// <param name="content">文本内容</param>  
//        private void Write(string content, string newLine)
//        {
//            if (string.IsNullOrEmpty(fileName))
//            {
//                throw new Exception("文件名不能为空！");
//            }
//            using (FileStream fs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.ReadWrite, FileShare.ReadWrite, 8, FileOptions.Asynchronous))
//            {
//                Byte[] dataArray = System.Text.Encoding.Default.GetBytes(content + newLine);
//                bool flag = true;
//                long slen = dataArray.Length;
//                long len = 0;
//                while (flag)
//                {
//                    try
//                    {
//                        if (len >= fs.Length)
//                        {
//                            fs.Lock(len, slen);
//                            lockDic[len] = slen;
//                            flag = false;
//                        }
//                        else
//                        {
//                            len = fs.Length;
//                        }
//                    }
//                    catch (Exception ex)
//                    {
//                        while (!lockDic.ContainsKey(len))
//                        {
//                            len += lockDic[len];
//                        }
//                    }
//                }
//                fs.Seek(len, SeekOrigin.Begin);
//                fs.Write(dataArray, 0, dataArray.Length);
//                fs.Close();
//            }
//        }

//        /// <summary>  
//        /// 写入文件内容  
//        /// </summary>  
//        /// <param name="content"></param>  
//        public void WriteLine(string content)
//        {
//            this.Write(content, System.Environment.NewLine);
//        }

//        /// <summary>  
//        /// 写入文件  
//        /// </summary>  
//        /// <param name="content"></param>  
//        public void Write(string content)
//        {
//            this.Write(content, "");
//        }
//    }

//    /// <summary>
//    /// 支付记录工具
//    /// </summary>
//    public class PayRecordHelp
//    {
//        public static String LogPath = AppDomain.CurrentDomain.BaseDirectory + @"\PayRecord\";

//        static string _bucketName = "paylognoaccount/";
//        public PayRecordHelp()
//        {
//            ReqDt = DateTime.Now;
//            Dt = DateTime.Now;
//            H = Dt.Hour;
//            ID = Guid.NewGuid().ToString();
//            IP = GetSystemInfo.GetClientInternetIPAddress();
//            Mac = GetSystemInfo.GetMacAddress();
//        }
//        public string Idkey { get; set; }
//        public String ID { get; set; }

//        /// <summary>
//        /// 当前企业
//        /// </summary>
//        public String CpnID { get; set; } = String.Empty;
//        public String ERPCpnId { get; set; } = String.Empty;


//        /// <summary>
//        /// 当前门店号
//        /// </summary>
//        public String OrgID { get; set; } = String.Empty;

//        /// <summary>
//        /// 交易时间所属小时
//        /// </summary>
//        public Int32? H { get; set; }

//        /// <summary>
//        /// 当前收银员
//        /// </summary>
//        public String RecMan { get; set; } = String.Empty;
//        /// <summary>
//        /// 当前收银机
//        /// </summary>
//        public String RecDevice { get; set; } = String.Empty;

//        /// <summary>
//        /// 商户订单号
//        /// </summary>
//        public String PayID { get; set; }

//        /// <summary>
//        /// 第三方单据号
//        /// </summary>
//        public String TransID { get; set; }

//        /// <summary>
//        /// 支付方式
//        /// </summary>
//        public String PayTyp { get; set; } = String.Empty;

//        /// <summary>
//        /// 支付通道
//        /// </summary>
//        public string PayChannel { get; set; }

//        /// <summary>
//        /// 交易状态(1.待支付2.已支付3.已退款4.已撤销5.取消支付6.其他(支付失败))
//        /// </summary>

//        public Enum_PayStatuss Stt { get; set; }

//        ///<summary>
//        /// 交易类型[1 支付,-1 退款,-2 撤销]
//        /// </summary>

//        public Enum_PayTyp Typ { get; set; }
//        /// <summary>
//        /// 通道代码
//        /// </summary>
//        public string Auth_type { get; set; }

//        /// <summary>
//        /// 收款帐号
//        /// </summary>
//        public String PID { get; set; } = String.Empty;

//        /// <summary>
//        /// 买方帐号
//        /// </summary>
//        public String UID { get; set; } = String.Empty;


//        /// <summary>
//        /// 交易金额（应付）（单元：分）
//        /// </summary>
//        public int Price { get; set; } = 0;

//        /// <summary>
//        /// 折扣金额
//        /// </summary>
//        public int Disc { get; set; } = 0;
//        /// <summary>
//        /// 减免金额（单元：分）
//        /// </summary>
//        public int DerAmt { get; set; } = 0;

//        /// <summary>
//        /// 实付金额
//        /// </summary>
//        public int Amt { get; set; } = 0;

//        /// <summary>
//        /// 商户承担金额（单元：分）
//        /// </summary>
//        public int CpnAmt { get; set; } = 0;

//        /// <summary>
//        /// 第三方承担金额（单元：分）
//        /// </summary>
//        public int OthAmt { get; set; } = 0;

//        /// <summary>
//        /// 支付平台承担金额（单元：分）
//        /// </summary>
//        public int WuAmt { get; set; } = 0;

//        /// <summary>
//        /// 退款单号
//        /// </summary>
//        public string RfundID { get; set; }
//        /// <summary>
//        /// 退款金额
//        /// </summary>
//        public int RfundAmt { get; set; }

//        /// <summary>
//        /// 撤销单号
//        /// </summary>
//        public string RvokID { get; set; }
//        /// <summary>
//        /// 撤销金额(全额撤销)
//        /// </summary>
//        public int CancelMoney { get; set; }

//        /// <summary>
//        /// 请求时间
//        /// </summary>
//        public DateTime ReqDt { get; set; }

//        /// <summary>
//        /// 业务日期
//        /// </summary>
//        public DateTime Dt { get; set; }

//        /// <summary>
//        /// 响应完成时间
//        /// </summary>
//        public DateTime ResDt { get; set; }

//        /// <summary>
//        /// 响应时长
//        /// </summary>
//        public int ResTimes { get; set; }


//        /// <summary>
//        ///参与平台活动[0-否、1-是]
//        /// </summary>
//        public int IsLkdrw { get; set; } = 0;

//        /// <summary>
//        /// 活动编号
//        /// </summary>
//        public int BllNo { get; set; }

//        /// <summary>
//        /// 奖品池序号
//        /// </summary>
//        public int Rdx { get; set; } = 0;

//        /// <summary>
//        /// 交易备注
//        /// </summary>
//        public String Msg { get; set; } = String.Empty;

//        /// <summary>
//        /// 支付耗时备注
//        /// </summary>
//        public string PayDt { get; set; }

//        /// <summary>
//        /// 配置信息
//        /// </summary>
//        public string ActCfg { get; set; }

//        /// <summary>
//        /// 单品信息
//        /// </summary>
//        public string GodsInfo { get; set; }
//        /// <summary>
//        /// 付款类型(刷卡,刷脸)
//        /// </summary>
//        public int AuthTyp { get; set; } = 0;
//        /// <summary>
//        /// 区域id
//        /// </summary>
//        public string Area { get; set; }
//        /// <summary>
//        /// 付款码
//        /// </summary>
//        public string AuthCode { get; set; }
//        /// <summary>
//        /// 本地前置机端口
//        /// </summary>
//        public string LocalPort { get; set; }
//        /// <summary>
//        /// 前置机IP
//        /// </summary>
//        public string IP { get; set; }
//        /// <summary>
//        /// 前置机MAC
//        /// </summary>
//        public string Mac { get; set; }

//        /// <summary>
//        /// 是否上传单品
//        /// </summary>
//        public bool IsUpGoods { get; set; } = false;
//        /// <summary>
//        /// 活动单品
//        /// </summary>
//        public string ActGoods { get; set; }

//        public override string ToString()
//        {
//            String result = String.Empty;
//            result = ID + "," + CpnID + "," + OrgID + "," + Dt + "," + H + "," + RecDevice + "," + RecMan + "," + PayID + "," + TransID + ","
//                + PayTyp + "," + Typ + "," + PID + "," + UID + "," + Disc + "," + Price + "," + DerAmt + "," + Amt + "," + CpnAmt + ","
//                + OthAmt + "," + WuAmt + "," + ReqDt + "," + ResDt + "," + ResTimes + "," + Stt + "," + IsLkdrw + "," + BllNo + "," +
//                "" + Rdx + "," + PayChannel + "," + Msg + "," + PayDt + "," + RfundID + "," + RfundAmt + "," + RvokID + "," + ActCfg + "," + GodsInfo + "\n";
//            return result;
//        }

//        /// <summary>
//        /// 记录
//        /// </summary>
//        /// <param name="recordInf"></param>
//        public void Record()
//        {
//            TaskRecord();

//        }

//        private void TaskRecord()
//        {
//            //#region 由于同步写会出现收银机无法及时出票的情况(所以废弃之前代码),特改写为异步写入本地文件,异步上传至支付api 20200609 废弃
//            ////String PostPath = ConfigurationManager.AppSettings.Get("WuPayUpLogAddress");
//            ////if (!string.IsNullOrEmpty(PostPath))
//            ////{

//            ////    var iso = new Newtonsoft.Json.Converters.IsoDateTimeConverter();
//            ////    iso.DateTimeFormat = "yyyy-MM-dd HH:mm:ss";
//            ////    String content = Newtonsoft.Json.JsonConvert.SerializeObject(this, iso);
//            ////    //LogPayLocal(content);
//            ////}
//            //#endregion

//            //#region 写入redis 20200609
//            //var h = DateTime.Now.Hour;
//            //var key = $"orders";//记录流水
//            //if (!string.IsNullOrEmpty(this.CpnID) && !string.IsNullOrEmpty(this.Area))
//            //{
//            //    new RedisHelper().ListRightPush(key, this);
//            //    if (new RedisHelper().ListLength(key) == 1)
//            //    {
//            //        new RedisHelper().KeyExpire(key, TimeSpan.FromDays(7));
//            //    }
//            //    new RedisHelper().StringSet<PayRecordHelp>(this.PayID, this, TimeSpan.FromDays(7));//记录当天日志
//            //    key = $"heartbeat";//记录心跳日志
//            //    if (new RedisHelper().ListByOne<PayRecordHelp>(key, x => x.PayChannel == PayChannel && x.LocalPort == LocalPort) == null && !string.IsNullOrEmpty(LocalPort) && Stt == Enum_PayStatuss.PaySuccess)
//            //    {
//            //        new RedisHelper().ListRightPush<PayRecordHelp>(key, this);
//            //    }
//            //    key = $"payMachineRcd";//记录本地前置机版本
//            //    if (new RedisHelper().ListByOne<PayMachineRcd>(key, x => x.Port == Area && x.CpnId == CpnID) == null && !string.IsNullOrEmpty(CpnID) && !string.IsNullOrEmpty(Area))
//            //    {
//            //        new RedisHelper().ListRightPush<PayMachineRcd>(key, new PayMachineRcd()
//            //        {
//            //            CpnId = CpnID,
//            //            Port = Area,
//            //            Path = (new DirectoryInfo(System.Web.Hosting.HostingEnvironment.MapPath("~").ToString())).FullName,
//            //        });
//            //    }
//            //}
//            //#endregion";
//        }
//        public static object _lock = new object();
//        ///// <summary>
//        ///// 记录失败本地日志
//        ///// </summary>
//        ///// <param name="msg"></param>
//        //public void LogPay(string msg)
//        //{

//        //    var dt = DateTime.Now;
//        //    DirectoryInfo di = new DirectoryInfo(System.Web.Hosting.HostingEnvironment.MapPath("~") + "\\" + "logs/LocalPayLogs");
//        //    if (di.Exists == false) di.Create();
//        //    DirectoryInfo disub = new DirectoryInfo(di.ToString() + "\\");
//        //    if (disub.Exists == false) disub.Create();

//        //    var FilePath = disub.ToString() + "\\" + $"{ dt.ToString("yyyyMMdd")}_{dt.Hour}" + ".log";

//        //    if (!File.Exists(FilePath))
//        //    {
//        //        using (var fs = File.Create(FilePath)) //防止产生“另一个进程访问”出错，不能直接Create
//        //        {
//        //            fs.Flush();
//        //            //fs.Close();//using了就不用close了
//        //        }
//        //    }
//        //    using (
//        //        var filestream = new System.IO.FileStream(FilePath, System.IO.FileMode.Append,
//        //            System.IO.FileAccess.Write, FileShare.ReadWrite))
//        //    {
//        //        using (var sw = new StreamWriter(filestream, Encoding.Default))
//        //        {
//        //            sw.WriteLine(msg);
//        //            sw.Flush();
//        //        }
//        //    }
//        //    //隐藏当前文件夹
//        //    disub.Attributes = FileAttributes.Hidden;
//        //}


//    }

//    /// <summary>
//    /// 支付记录
//    /// </summary>
//    public class PayRecord : PayRecordHelp
//    {
//        public PayRecord()
//        {
//            Stt = Enum_PayStatuss.StayPay;
//        }
//    }

//    /// <summary>
//    /// 查询记录
//    /// </summary>
//    public class QueryRecord : PayRecordHelp
//    {
//        public QueryRecord()
//        {

//        }

//    }

//    /// <summary>
//    /// 退款记录
//    /// </summary>
//    public class RefundRecord : PayRecordHelp
//    {


//    }

//    /// <summary>
//    /// 撤销记录
//    /// </summary>
//    public class CancelRecord : PayRecordHelp
//    {


//    }

//}
